Git vs SVN: ๋ถ์ฐํ๊ณผ ์ค์์ง์คํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๋น๊ต
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (VCS)์ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ์ฌ๋ Git์ด ์ฌ์ค์ ํ์ค์ผ๋ก ์๋ฆฌ ์ก์์ง๋ง, ์ฌ์ ํ ๋ง์ ๊ธฐ์ ์์ **SVN(Subversion)**์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ๋ ์์คํ ์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
1. ํต์ฌ ์ํคํ ์ฒ์ ์ฐจ์ด
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋๋ ๋ฐฉ์, ์ฆ **์ค์์ง์คํ(Centralized)**๊ณผ **๋ถ์ฐํ(Distributed)**์ ์ฐจ์ด์ ๋๋ค.
SVN: ์ค์์ง์คํ (CVCS)
- ๊ตฌ์กฐ: ํ๋์ ์ค์ ์๋ฒ์ ์ ์ฒด ํ๋ก์ ํธ์ ํ์คํ ๋ฆฌ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
- ๋ฐฉ์: ๊ฐ๋ฐ์๋ ์๋ฒ์์ ํน์ ๋ฒ์ ์ ์ฝ๋(Working Copy)๋ง ๋ด๋ ค๋ฐ์(Check-out) ์์ ํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ ์๋ฒ์ ๋ณด๋ ๋๋ค(Commit).
- ํน์ง: ํ์คํ ๋ฆฌ๋ฅผ ํ์ธํ๊ฑฐ๋ ์ปค๋ฐ์ ํ๋ ค๋ฉด ๋ฐ๋์ ์ค์ ์๋ฒ์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค.
Git: ๋ถ์ฐํ (DVCS)
- ๊ตฌ์กฐ: ์๋ฒ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๊ฐ๋ฐ์์ ๋ก์ปฌ PC์ ์ ์ฒด ํ๋ก์ ํธ์ ํ์คํ ๋ฆฌ๊ฐ ํต์งธ๋ก ๋ณต์ ๋์ด ์์ต๋๋ค.
- ๋ฐฉ์: ๋ก์ปฌ์์ ์ปค๋ฐ, ๋ก๊ทธ ํ์ธ, ๋ธ๋์น ์์ฑ ๋ฑ์ ์์ ๋กญ๊ฒ ์ํํ๊ณ , ํ์ํ ๋๋ง ์๋ฒ์ ๋๊ธฐํ(Push/Pull)ํฉ๋๋ค.
- ํน์ง: ์๋ฒ๊ฐ ์์ด๋ ๋๋ถ๋ถ์ ์์ ์ ์คํ๋ผ์ธ์ผ๋ก ์ํํ ์ ์์ผ๋ฉฐ, ์๋ฒ ์ฅ์ ์์๋ ๋ก์ปฌ ๋ณต์ ๋ณธ์ผ๋ก ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
2. ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์: Delta vs Snapshot
SVN: Delta ๋ฐฉ์
SVN์ ํ์ผ์ ๊ธฐ๋ณธ ๋ฒ์ ๊ณผ ๊ทธ ์ดํ์ **์ฐจ์ด์ (Delta)**์ ์ ์ฅํฉ๋๋ค. ํน์ ๋ฒ์ ์ ํ์ผ์ ๋ง๋ค๋ ค๋ฉด ์ด๊ธฐ ๋ฒ์ ๋ถํฐ ๋ชจ๋ ์ฐจ์ด์ ์ ์์ฐจ์ ์ผ๋ก ์ ์ฉํด์ผ ํ๋ฏ๋ก, ํ์คํ ๋ฆฌ๊ฐ ๊ธธ์ด์ง์๋ก ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
Git: Snapshot ๋ฐฉ์
Git์ ํ์ผ์ ์ฐจ์ด์ ์ด ์๋ **์ค๋ ์ท(Snapshot)**์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ปค๋ฐํ ๋๋ง๋ค ํ์ผ ์์คํ ์ ์ฒด์ ์ํ๋ฅผ ์ฌ์ง ์ฐ๋ฏ ์ ์ฅํ๋ฉฐ, ๋ณ๊ฒฝ๋์ง ์์ ํ์ผ์ ์๋ก ์ ์ฅํ์ง ์๊ณ ์ด์ ํ์ผ์ ๋ํ ๋งํฌ๋ง ์ ์งํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋ฒ์ ์ ํ๊ณผ ๋น๊ต ์ฐ์ฐ์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
3. ๋ธ๋์น(Branch)์ ๋จธ์ง(Merge)
| ๊ตฌ๋ถ | Git | SVN |
|---|---|---|
| ๋ธ๋์น ์์ฑ | ๋จ์ํ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ์์ฑ (๋งค์ฐ ๋น ๋ฆ) | ๋ฌผ๋ฆฌ์ ์ธ ๋๋ ํ ๋ฆฌ ๋ณต์ฌ (๋น๊ต์ ๋ฌด๊ฑฐ์) |
| ๋จธ์ง(Merge) | ์ปค๋ฐ ๋จ์๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์๋ ์ถ์ (๊ฐ๋ ฅํจ) | ํ์ผ ๋จ์๋ก ์ฐจ์ด์ ์ ์๋์ ๊ฐ๊น๊ฒ ๊ณ์ฐ (๋ณต์กํจ) |
| ์ํฌํ๋ก์ฐ | ๊ธฐ๋ฅ๋ณ ๋ธ๋์น ์์ฑ์ด ์ผ์์ ์ | ๋ธ๋์น ์์ฑ์ ๊ฐ๊ธ์ ์์ ํ๋ ๊ฒฝํฅ |
4. ์ฃผ์ ๋น๊ต ์์ฝ
| ํน์ง | Git (๋ถ์ฐํ) | SVN (์ค์์ง์คํ) |
|---|---|---|
| ์๋ | ๋ก์ปฌ ์์ ์ด๋ฏ๋ก ๋งค์ฐ ๋น ๋ฆ | ๋คํธ์ํฌ ์๋์ ์์กด์ ์ |
| ์คํ๋ผ์ธ ์์ | ๊ฐ๋ฅ (์ปค๋ฐ, ๋ก๊ทธ, ๋ธ๋์น ๋ฑ) | ๋ถ๊ฐ๋ฅ (์ฒดํฌ์์๋ ์ฝ๋ ์์ ๋ง ๊ฐ๋ฅ) |
| ๋ณด์/๊ถํ | ์ ์ฒด ์ ์ฅ์๋ฅผ ๋ณต์ ํ๋ฏ๋ก ๋ถ๋ถ ๊ถํ ์ ์ด๊ฐ ์ด๋ ค์ | ๋๋ ํ ๋ฆฌ๋ณ๋ก ์ธ๋ฐํ ๊ถํ ์ ์ด๊ฐ ๊ฐ๋ฅํจ |
| ํ์ต ๊ณก์ | ๋ช ๋ น์ด๊ฐ ๋ง๊ณ ๊ฐ๋ ์ด ๋ณต์กํ์ฌ ๋ค์ ๋์ | ๊ตฌ์กฐ๊ฐ ์ง๊ด์ ์ด๊ณ ๋จ์ํ์ฌ ๋ฎ์ |
| ๋์ฉ๋ ํ์ผ | ๋ฐ์ด๋๋ฆฌ ํ์ผ ์ฒ๋ฆฌ์ ์ทจ์ฝํ ์ ์์ (LFS ํ์) | ๋์ฉ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ ๊ด๋ฆฌ์ ์ ๋ฆฌํจ |
5. ์ Git์ ์ฌ์ฉํด์ผ ํ๋๊ฐ? (Why Git?)
โ ํญ๋ฐ์ ์ธ ์์ฐ์ฑ๊ณผ ์คํ๋ผ์ธ ์์ ๋
Git์ ๋ชจ๋ ํ์คํ ๋ฆฌ๋ฅผ ๋ก์ปฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ปค๋ฐ, ๋ก๊ทธ ์กฐํ, ์ฝ๋ ๋น๊ต, ๋ธ๋์น ์ ํ์ด ์๋ฒ ํต์ ์์ด 0.1์ด ๋ด์ธ๋ก ๋๋ฉ๋๋ค. ๋นํ๊ธฐ ์์์๋ ์ธํฐ๋ท์ด ๋ถ์์ ํ ๊ณณ์์๋ ๋ชจ๋ ๋ฒ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ 100% ํ์ฉํ ์ ์์ต๋๋ค.
โก ๋ธ๋์น ์ค์ฌ์ ๊ฐ๋ฐ ๋ฌธํ (Feature Branch Workflow)
Git์ ๋ธ๋์น๋ ๋จ์ํ ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ผ ๋ฟ์ ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ๋ง๋ค ๋๋ง๋ค ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ , ์คํํ๊ณ , ์คํจํ๋ฉด ๋ฐ๋ก ๋ฒ๋ฆฌ๋ ๊ณผ์ ์ด ๋งค์ฐ ๊ฐ๋ณ์ต๋๋ค. ์ด๋ ํ๋์ ์ธ Agile ๋ฐฉ์๊ณผ CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ํ์์ ์ธ ์์์ ๋๋ค.
โข ๋ง๊ฐํ ์ํ๊ณ์ ํ์ ๋๊ตฌ
GitHub, GitLab, Bitbucket ๋ฑ ์ ์ธ๊ณ์ ์ธ ํ์ ํ๋ซํผ์ ๋ชจ๋ Git ๊ธฐ๋ฐ์ ๋๋ค. ์๋ง์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๋ ๊ฐ์ด๋๊ฐ Git์ ํ์ค์ผ๋ก ์ผ๊ณ ์์ผ๋ฉฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ StackOverflow ๋ฑ์์ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ๋ ํจ์ฌ ์ฝ์ต๋๋ค.
6. ์ SVN์ ์ฌ์ฉํด์ผ ํ๋๊ฐ? (Why SVN?)
โ ์ง๊ด์ ์ธ ์ค์ ํต์ ์ ๋ณด์
SVN์ ์ค์ ์๋ฒ๊ฐ ์ง์ค์ ์ ์ผํ ์์ฒ(Single Source of Truth)์ ๋๋ค. ๊ด๋ฆฌ๊ฐ ๋ช ํํ๋ฉฐ, ํนํ ๋๋ ํ ๋ฆฌ/ํ์ผ ๋จ์์ ์ธ๋ฐํ ์ ๊ทผ ๊ถํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ํน์ ํ์๊ฒ๋ ํน์ ํด๋๋ง ๋ณด์ด๊ฒ ํ๊ฑฐ๋ ์ฐ๊ธฐ ๊ถํ์ ์ฃผ๋ ๊ธฐ๋ฅ์ Git์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ SVN๋ง์ ๊ฐ๋ ฅํ ์ฅ์ ์ ๋๋ค.
โก ๋์ฉ๋ ํ์ผ(Binary) ๊ด๋ฆฌ์ ํจ์จ์ฑ
Git์ ์ ์ฒด ํ์คํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ฏ๋ก ๊ณ ํด์๋ ์ด๋ฏธ์ง, ์์, ์ค๊ณ๋๋ฉด ๊ฐ์ ๋์ฉ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ๋ง์์ง๋ฉด ๋ก์ปฌ ์ ์ฅ์ ์ฉ๋์ด ์์๊ฐ์ ์์ญ GB๋ก ๋์ด๋ฉ๋๋ค. ๋ฐ๋ฉด SVN์ ํ์ฌ ํ์ํ ๋ฒ์ ๋ง ๋ด๋ ค๋ฐ์ ์์ ํ๋ฏ๋ก, ๋์์ธ ์์ฐ์ด๋ ๋ฆฌ์์ค๊ฐ ๋ง์ ๊ฒ์ ๊ฐ๋ฐ, ๋์์ธ ํ๋ก์ ํธ์์ ์ฌ์ ํ ์ ํธ๋ฉ๋๋ค.
โข ๋ฎ์ ํ์ต ๊ณก์ ๊ณผ ๋จ์ํ ์ํฌํ๋ก์ฐ
Git์ rebase, cherry-pick, reflog ๊ฐ์ ๊ฐ๋
์ ์ด๋ณด์์๊ฒ ๋งค์ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ๋ฐ๋ฉด SVN์ update์ commit์ด๋ผ๋ ๋จ์ํ ๊ฐ๋
๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ด์์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๋น๊ฐ๋ฐ ์ง๊ตฐ(๋์์ด๋, ๊ธฐํ์)๊ณผ ํ์
ํ ๋ ํจ์ฌ ์์ํฉ๋๋ค.
7. ์ด๋ค ํ๋ก์ ํธ์ ์ด๋ค ๋๊ตฌ๊ฐ ์ด์ธ๋ฆด๊น?
| ํ๋ก์ ํธ ์ ํ | ์ถ์ฒ ๋๊ตฌ | ์ด์ |
|---|---|---|
| ํ๋์ ์น/์ฑ ๊ฐ๋ฐ | Git | ๋น ๋ฅธ ๋ฐฐํฌ ์ฃผ๊ธฐ๊ฐ ํ์ํ๊ณ , ๋ธ๋์น ํ์ฉ์ด ๋ง์ผ๋ฉฐ, ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํจ. |
| ์คํ ์์ค ํ๋ก์ ํธ | Git | ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ Forkํ์ฌ ์์ ํ๊ณ Pull Request๋ฅผ ๋ณด๋ด๋ ๋ถ์ฐ ํ์ ์ ์ต์ ํ๋จ. |
| ๊ฒ์ ๊ฐ๋ฐ (๋ฆฌ์์ค ์ค์ฌ) | SVN | ๋์ฉ๋ 3D ๋ชจ๋ธ, ํ ์ค์ฒ, ์ฌ์ด๋ ํ์ผ์ด ๋ง์ ์ ์ฒด ํ์คํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๊ธฐ ๋ถ๋ด์ค๋ฌ์. |
| ๊ธ์ต/์ ๋ถ ๋ณด์ ํ๋ก์ ํธ | SVN | ํด๋๋ณ๋ก ์๊ฒฉํ ์ ๊ทผ ๊ถํ ์ ์ด๊ฐ ํ์ํ๊ณ , ์์ ์์ ๋ก์ปฌ์ ์ ์ฒด ์์ค ์ฝ๋๊ฐ ๋จ๋ ๊ฒ์ ๋ฐฉ์งํด์ผ ํจ. |
| ๋จ์ ๋ฌธ์/๋ณด๊ณ ์ ๊ด๋ฆฌ | SVN | ๋ฒ์ ๊ด๋ฆฌ ๊ฐ๋ ์ด ์์ํ ์ฌ์ฉ์๋ค์๊ฒ ๋ณต์กํ Git ๋ช ๋ น์ด๋ณด๋ค ์ง๊ด์ ์ธ ์ฌ์ฉ์ฑ์ ์ ๊ณตํจ. |